package demo04;

/*
 *  可变参数：JDK1.5+的新特性
 *  使用前提：
 *      当方法的参数列表数据类型已经确定，参数个数不确定时，就可以使用可变参数
 *  使用格式：定义方法时使用
 *      修饰符 返回值类型 方法名(数据类型...变量名) {}
 *  可变参数的原理：
 *      可变参数底层是个数组，根据传递参数个数不同，会创建不同长度的数组，来存储这些参数
 *      传递的参数个数，可以是0到多个（0个即不传递）
 *  可变参数的注意事项：
 *      1. 一个方法的参数列表只能有一个可变参数
 *      2. 如果方法有多个参数，那么可变参数必须写在参数列表的末尾
 */
public class Demo03VarArgs {
    public static void main(String[] args) {
        System.out.println(add(1, 2, 3, 4, 5)); // 15
    }

    // 定义一个计算0~n个int类型整数的和的方法，整数数量不确定
    public static int add(int... arr) { // 可变参数底层是个数组
        System.out.println(arr); // [I@442d9b6e，输出了数组的地址值
        System.out.println(arr.length); // 5，传递了5个参数，因此数组长度为5
        int sum = 0;
        for (int i : arr) {
            sum += i;
        }
        return sum;
    }

    // 可变参数的特殊（终极）写法
    public static void method(Object... objects) { // 可传入任何参数
        // ...
    }
}
